언제 캐시를 갱신해야할까? HTTP는 클라이언트-서버간의 규약이기 때문에 서버가 직접 캐시나 클라이언트에 가서 알려줄수도 없는 노릇이다. 그래서 max-age
와 같은 만료 기간을 설정하여 캐시를 비우는 처리(cache eviction
이라 함)를 하는 것이다.
캐시가 만료하기 전까지 fresh
하다고 하며, 만료 후에는 stale
(썩음)이라고 한다. stale
리소스는 곧바로 교체되거나 무시되는 것이 아니라 요청에 If-None-Match
헤더가 함께 가서 실제로 변화가 있는지 확인한 후에 교체된다. 만약 정보가 여전히 최신의 것이라면 304
(Not Modified) 응답이 돌아오며 실제 데이터는 가져오지 않는다.
만료기간이 없는 경우 캐시가 최신의 상태인지 어떻게 확인할 수 있을까? 이럴 때는 Last-Modified
헤더를 확인한다.
freshnessLifetime = Date - Last-modified / 10
expirationTime = responseTime + freshnessLifetime - currentAge